const WebSocket = require("ws");
const EventEmmitter = require("events");
const signal = new EventEmmitter(); // 信令通道

const ws = new WebSocket("ws://127.0.0.1:8010");

ws.on("open", () => {
  console.log("WebSocket连接已建立");
});

ws.on("message", (message) => {
  let data = {};
  try {
    data = JSON.parse(message);
  } catch (error) {
    console.error("解析消息失败:", error);
    return;
  }
  signal.emit(data.event, data.data); // 通过 signal 往外抛事件
});

function send(event, data) {
  ws.send(JSON.stringify({ event, data }));
}

// 登录事件，ipcMain 发送 login 事件
function invoke(event, data, answerEvent) {
  return new Promise((resolve, reject) => {
    // 发送登录事件
    send(event, data);
    // 监听 answerEvent (服务端响应的 logined) 事件, 拿到结果直接 resolve
    // 这里的 signal.once 是为了确保只监听一次，避免多次触发
    signal.once(answerEvent, (data) => {
      // 上面send成功，服务器返回 logined时间，message 里触发，这边监听
      resolve(data.code);
    });
    setTimeout(() => {
      reject(new Error("请求超时"));
    }, 5000); // 设置超时时间为5秒
  });
}

signal.invoke = invoke;
signal.send = send;
module.exports = signal;
